#!usr/bin/env python  
# -*- coding:utf-8 -*-
""" 
@author:robot
@file: move_zeroes.py 
@version:
@time: 2023/12/29

两个指针的初始值都是0，只要遍历判断到当前元素非零，那么就将值赋给lastnozero指针所指向的位置，
将0赋给current指针所指元素，完成一个交换过程。

如此一来，lastnozero指针所指向的位置之前必定都是非零元素，相当于实现了将非零元素逐个移动到0之前


给current指针所指元素赋值之前，需要判断两个指针指向的是不是同一位置。
如果指向位置相同，就不能给current指针指向的元素赋0，否则会覆盖非零元素的值。

完成交换之后，要将lastnozero指针自增1，相当于向后移动一位，以便下次数值交换过程。


0 1 0 3 12

current 0
value 0
lastnozero 0


current 1
value 1
lastnozero 0
1 1 0 3 12
1 0 0 3 12
lastnozero 1

current 2
value 0
lastnozero 1

current 3
value 3
lastnozero 1
1 3 0 3 12
1 3 0 0 12
lastnozero 2

current 4
value 12
lastnozero 2
1 3 12 0 12
1 3 12 0 0
lastnozero 3

"""
Array = [0, 1, 0, 3, 12]


def move_zeroes(array):
    lastnotzero = 0
    for current in range(len(array)):
        if array[current] != 0:
            array[lastnotzero] = array[current]
            if lastnotzero != current:
                array[current] = 0
            lastnotzero += 1
    return array


if __name__ == '__main__':
    print(move_zeroes(Array))